Here's an equation I used in a dynamic movement that you might be able to modify to use in a superscope. It was used in "moving kalidescope" in my AVS pack Rucksack where it included rotation and zooming. It produces a nice movement that can gradually or suddenly change direction depending on the value for cmx for x and cmy for y. 

---------------- 

perframe: 

mx=mx+incmx*.2; 
my=my+incmy*.2; 
incmx=incmx+(destmx-incmx)*cmx; 
incmy=incmy+(destmy-incmy)*cmy; 

onbeat: 

destmx=rand(200)/200-.5; 
destmy=rand(200)/200-.5; 
cmx=1/((rand(200)/10)+1); 
cmy=1/((rand(200)/10)+1); 

per pixel: 

x=x+mx; 
y=y+my; 

---------------- 

Variable Explanation 

mx = the amount to move x by 
incmx = the amount to increment mx by 
destmx = the target value for mx to be 
cmx = how long you want the change in direaction to take to take (the smaller, the longer) 

---------------- 

How it works 

- x is changed by the value in mx, multiplied by .2 to scale it down 
- mx is changed by the value in incmx 
- incmx is changed by the value of the incmx minus destmx, all multiplied by cmx 
- incmx minus destmx gives how much destmx is greater than incmx (call it diffmx for convenience) 
- devide diffmx by any value to get that fraction of the difference 

eg. 
mx=5 
incmx = -2 
destmx = 1 
cmx = .2 

second frame: 
mx=3 
incmx = -2 + (1 - -2) * .2 
incmx = -2 + 3 *.2 
incmx = -2 + .6 
incmx = -1.4 

third frame: 
mx=1.6 
incmx = -1.4 + (1 - -1.4) *.2 
incmx = -1.4 + 2.4 *.2 
incmx = -1.4 + .88 
incmx = -.52 

fourth frame: 
mx=1.08 
and so on... 

- distmx is determined by a random number devided by the number of values to put it in the range [0]..[1], then shifted down by .5 so the range becomes [-.5]..[.5] 
- cmx is determined by a random number, devided to make sure it isn't too big, then shifted up by 1 so there is no devision by 0, which can cause funky things to happen
